// 学习cookies与sessions

const Koa = require("koa");
const router = require("koa-router")();
const views = require("koa-views");
const nunjucks = require("nunjucks");
const session = require("koa-session");
const app = new Koa();


app.keys= ["2370218992"];

//模板引擎的渲染
app.use(views(__dirname+"/views",{
    map :{html : "nunjucks"}
}))

//中间件引用session
app.use(session( {
    maxAge:6000 
} ,app))


router.get("/",async(ctx,next)=>{
     await ctx.render("index.html",{
        title : "学习使我快乐 让自己变得更加强大"
    })
})


//cookies 使用set时第一次是response  再次访问时request里也出现其明值对 

router.get("/video",async(ctx,next)=>{
    // cookies以明值对的方式记录在客户端   
    //可设置其过期时间 ,{maxAge : 4000}
    ctx.cookies.set("luhan",'237',{
       maxAge :3000  
    });
    ctx.body ="123";
})

router.get("/category",async(ctx,next)=>{
    //使用get来获取获取其明值对 只有request
    let luhan =ctx.cookies.get("luhan");
    ctx.body = luhan ;
})


//设置session
router.get("/session",async(ctx,next)=>{
    ctx.session.user="lu";
    ctx.body = "session" ;
})

//服务器通过加密的cookies来获取session
router.get("/session_test",async(ctx,next)=>{
    let user = ctx.session.user;
    ctx.body = user ;
})



app.use(router.routes());

app.listen(3000,()=>{
    console.log("服务器运行的地址是:http://127.0.0.1:3000");
})

//记录当前网页的访问次数

router.get("/count",async(ctx,next)=>{
    let count = ctx.cookies.get("count"); //检测是否第一次访问
    if(count>0){   //非第一次次访问
        count++ ;
        ctx.cookies.set("count",count ,{maxAge:3000});
    }else{         //第一次访问
        count = 1 ;
        ctx.cookies.set("count",count,{maxAge :3000});
    }
    ctx.body = count ;

})



//记录当前网页访问的次数

router.get("/session_count", async ctx => {
    if(ctx.session.count>0){
        ctx.session.count = ++ctx.session.count;
    }else{
        ctx.session.count = 1
    }
    ctx.body = ctx.session.count
})



// 1、cookie 和session的区别是：cookie数据保存在客户端，session数据保存在服务器端。
// 2、两个都可以用来存私密的东西，同样也都有有效期的说法,区别在于session是放在服务器上的，
// 过期与否取决于服务期的设定，cookie是存在客户端的，过去与否可以在cookie生成的时候设置进去。 